-- 从参数中获取优惠券ID
local voucherId = ARGS[1]

-- 从参数中获取用户ID
local userId = ARGS[2]

-- 从参数中获取订单ID
local orderId = ARGS[3]

-- 构建库存的Redis key，格式为 "seckill:stock:优惠券ID"
local stockKey = "seckill:stock:" .. voucherId

-- 构建订单的Redis key，格式为 "seckill:order:优惠券ID"
local orderKey = "seckill:order:" .. voucherId

-- 检查库存是否小于等于0，如果是，则返回1表示库存不足
if (redis.call("get", stockKey) <= 0) then
    return 1
end

-- 检查用户是否已经下单过该优惠券，如果是，则返回2表示不能重复下单
if (redis.call("sismember", orderKey, userId) == 1) then
    return 2
end

-- 减少库存，表示一个用户成功下单
redis.call("incrby", stockKey, -1)

-- 将用户ID添加到订单集合中，表示该用户已经下单
redis.call("sadd", orderKey, userId)

-- 将订单信息添加到Redis Stream中，用于后续处理
redis.call("xadd", "stream.orders", "*", "userId", userId, "voucherId", voucherId, "id", orderId)

-- 返回0表示下单成功
return 0